package com.jzo2o.foundations.service;

import com.baomidou.mybatisplus.extension.service.IService;
import com.jzo2o.api.foundations.dto.response.ServeAggregationResDTO;
import com.jzo2o.common.model.PageResult;
import com.jzo2o.foundations.model.domain.Serve;
import com.jzo2o.foundations.model.dto.request.ServePageQueryReqDTO;
import com.jzo2o.foundations.model.dto.request.ServeUpsertReqDTO;
import com.jzo2o.foundations.model.dto.response.ServeAggregationSimpleResDTO;
import com.jzo2o.foundations.model.dto.response.ServeCategoryResDTO;
import com.jzo2o.foundations.model.dto.response.ServeResDTO;
import com.jzo2o.foundations.model.dto.response.ServeSimpleResDTO;

import java.math.BigDecimal;
import java.util.List;

/**
 * 区域服务接口
 * @author JIAN
 */
public interface IServeService extends IService<Serve> {
    /**
     * 查询指定id的服务并缓存
     */
    Serve selectByIdCache(Long id);

    /**
     * 区域服务分页查询
     * @param servePageQueryReqDTO 分页参数
     */
    PageResult<ServeResDTO> page(ServePageQueryReqDTO servePageQueryReqDTO);

    /**
     * 批量添加区域下的服务项
     * @param serveItems 服务项集合
     */
    void addBatch(List<ServeUpsertReqDTO> serveItems);

    /**
     * 更新指定服务id的价格
     */
    Serve updatePrice(Long id, BigDecimal price);

    /**
     * 设置指定服务上架
     */
    Serve updateOnSale(Long id);

    /**
     * 设置指定的服务下架
     */
    void updateOffSale(Long id);

    /**
     * 删除指定的服务
     */
    void deleteById(Long id);

    /**
     * 设置指定服务热门
     */
    void updateOnHot(Long id);

    /**
     * 取消指定服务热门
     */
    void updateOffHot(Long id);

    /**
     * 获取首页服务类型及服务项
     * @param regionId 地区id
     */
    List<ServeCategoryResDTO> getFirstPageServeList(Long regionId);

    /**
     * 获取首页热门服务
     * @param regionId 地区id
     */
    List<ServeAggregationSimpleResDTO> getHotServeList(Long regionId);

    /**
     * 获取指定id的服务
     */
    ServeAggregationSimpleResDTO getServeById(Long serveId);

    /**
     * 查询指定区域的服务
     */
    List<ServeSimpleResDTO> findServeList(String cityCode, Long serveTypeId, String keyword);

    /**
     * 获取指定id的服务
     */
    ServeAggregationResDTO getServeAggregationById(Long id);
}